﻿Imports Lourdes.BackEnd.View
Imports Infragistics.Win.UltraWinGrid
Imports Lourdes.BackEnd
Public Class ucMercaderiaGridFactura

  Private WithEvents frmMerBuscar As frmMercaderiaBuscar
  Public Event ProductoSeleccionado(ByVal pProducto As vProducto)
  Public Event MontoTotalActualizado(ByVal pMontoTotal As Double)
  Private _Productos As vLstProductos
  Private _ListaPrecioId As Integer?
  Public Event MercaderiaSelectorInitialize()
  Private _FilaActual As Infragistics.Win.UltraWinGrid.UltraGridRow
  Private _FireUpdateCellUpdate As Boolean = True

  Public Property ListaPrecioId() As Integer?
    Get
      Return _ListaPrecioId
    End Get
    Set(ByVal value As Integer?)
      _ListaPrecioId = value
      If frmMerBuscar IsNot Nothing And _ListaPrecioId.HasValue Then
        frmMerBuscar.ListaPrecioId = _ListaPrecioId
      End If
    End Set
  End Property

  Public Property Productos() As vLstProductos
    Get
      Return _Productos
    End Get
    Set(ByVal value As vLstProductos)
      _Productos = value
      CargarGrid()
    End Set
  End Property

  Public Sub New()

    ' Llamada necesaria para el diseñador.
    InitializeComponent()

    ' Agregue cualquier inicialización después de la llamada a InitializeComponent().
    _Productos = New vLstProductos
    frmMerBuscar = New frmMercaderiaBuscar
    'frmMerBuscar.ListaPrecioId = _ListaPrecioId

  End Sub

  Private Sub ucMercaderiaGridFactura_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    CargarGrid()
    grdProductos.Rows.AddRowModifiedByUser = True
  End Sub

  Private Sub CargarGrid()
    Try
      With grdProductos
        VLstProductosBindingSource.DataSource = _Productos
        .DataSource = VLstProductosBindingSource
        .DataBind()
      End With
    Catch ex As Exception
      Utils.ManejoErrores(ex)
    End Try
  End Sub

  Private Sub grdProductos_AfterCellActivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles grdProductos.AfterCellActivate
    Dim grd As UltraGrid = sender
    Try
      If grdProductos.ActiveCell.Column.Key = "TotalLinea" And grdProductos.Rows.Count = 1 Then
        FocusAddNewRow()
      End If
    Catch ex As Exception
      Utils.ManejoErrores(ex)
    End Try
  End Sub

  Private Sub grdProductos_AfterCellUpdate(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinGrid.CellEventArgs) Handles grdProductos.AfterCellUpdate
    If e.Cell.Column.Key = "MercaderiaNumero" And _FireUpdateCellUpdate Then
      BuscadorFactory()
      _FilaActual = e.Cell.Row
      frmMerBuscar.GetProductoByFilters(_ListaPrecioId, e.Cell.Value.ToString, String.Empty, Me.ParentForm)
    End If

    If e.Cell.Column.Key = "Cantidad" Then
      Dim dblStock As Double = e.Cell.Row.Cells("CantidadStock").Value
      Dim dblCantIngresada As Double = e.Cell.Row.Cells("Cantidad").Value
      If dblCantIngresada > dblStock Then
        e.Cell.Appearance.BackColor = Color.Red
      Else
        e.Cell.Appearance.BackColor = Color.Transparent
      End If
      RaiseEvent MontoTotalActualizado(_Productos.Total)
    End If
  End Sub

  Private Sub BuscadorFactory()
    If frmMerBuscar.IsDisposed Then
      frmMerBuscar = New frmMercaderiaBuscar
      frmMerBuscar.ListaPrecioId = _ListaPrecioId
    End If
  End Sub

  Private Sub frmMerBuscar_ProductoSeleccionado(ByVal pProducto As vProducto) Handles frmMerBuscar.ProductoSeleccionado
    CargarFilaFromBusqueda(pProducto, _FilaActual)
    _FilaActual = Nothing
  End Sub

  Private Sub CargarFilaFromBusqueda(ByVal pProducto As vProducto, ByVal pFilaGrid As UltraGridRow)
    Try
      _FireUpdateCellUpdate = False
      With pFilaGrid
        If Not IsNumeric(.Cells("Cantidad").Value) Then
          .Cells("Cantidad").Value = pProducto.Cantidad          
        End If
        .Cells("CantidadStock").Value = pProducto.CantidadStock
        .Cells("MercaderiaId").Value = pProducto.MercaderiaId
        .Cells("MercaderiaNumero").Value = pProducto.MercaderiaNumero
        .Cells("Nombre").Value = pProducto.Nombre
        .Cells("Precio").Value = pProducto.Precio
        .Cells("TotalLinea").Value = pProducto.TotalLinea
      End With
    Catch ex As Exception
      Utils.ManejoErrores(ex)
    Finally
      _FireUpdateCellUpdate = True
    End Try

    _FireUpdateCellUpdate = True
  End Sub

  Private Sub grdProductos_AfterRowInsert(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinGrid.RowEventArgs) Handles grdProductos.AfterRowInsert
    RaiseEvent MontoTotalActualizado(_Productos.Total)
  End Sub

  Private Sub grdProductos_AfterRowsDeleted(ByVal sender As Object, ByVal e As System.EventArgs) Handles grdProductos.AfterRowsDeleted
    RaiseEvent MontoTotalActualizado(_Productos.Total)
  End Sub

  Private Sub grdProductos_InitializeLayout(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs) Handles grdProductos.InitializeLayout
    With e.Layout.Grid.Rows.Band.Override
      .AllowAddNew = AllowAddNew.FixedAddRowOnTop
    End With
    grdProductos.Rows.AddRowModifiedByUser = True
  End Sub

  Private Sub FocusAddNewRow()
    With grdProductos
      .Rows.TemplateAddRow.Activate()
      .ActiveRow.Cells("MercaderiaNumero").Activate()
      .PerformAction(UltraGridAction.EnterEditMode, False, False)
    End With
  End Sub

  Public Function SetMode(ByVal pTipoAbm As Enums.TipoABM)
    If pTipoAbm = Enums.TipoABM.Modificacion Or pTipoAbm = Enums.TipoABM.Baja Then
      grdProductos.DisplayLayout.Override.AllowUpdate = Infragistics.Win.DefaultableBoolean.False
    ElseIf pTipoAbm = Enums.TipoABM.Alta Then
      grdProductos.DisplayLayout.Override.AllowUpdate = Infragistics.Win.DefaultableBoolean.True
    End If
  End Function

  Public Sub LimpiarUCMercaderias()
    _Productos = Nothing
    _Productos = New vLstProductos
    _ListaPrecioId = Nothing
    CargarGrid()
    grdProductos.Rows.AddRowModifiedByUser = True
  End Sub
End Class
